/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/*
 * frmComprasDet.java
 *
 * Created on 31-ago-2011, 1:47:02
 */

package GUI;

import Negocio.Cliente;
import Negocio.DatosPrestamo;
import Negocio.Regla;
import Negocio.SolicitudPrestamo;
import TablasAuxiliares.TACilindradasVehiculo;
import TablasAuxiliares.TAEstadosAutorizacion;
import TablasAuxiliares.TAEstudioMorosidad;
import TablasAuxiliares.TAPaises;
import TablasAuxiliares.TASexos;
import TablasAuxiliares.TATiposBien;
import TablasAuxiliares.TATiposDocumento;
import TablasAuxiliares.TATiposElectrodomestico;
import TablasAuxiliares.TATiposFinanciacion;
import TablasAuxiliares.TATiposInmueble;
import TablasAuxiliares.TATiposInteres;
import TablasAuxiliares.TATiposOcio;
import TablasAuxiliares.TATiposOtros;
import TablasAuxiliares.TATiposSalud;
import TablasAuxiliares.TATiposVehiculo;
import TablasAuxiliares.TAUsosVehiculo;
import TablasAuxiliares.TAZonasInmueble;
import Util.FormatoFecha;
import Util.GestorConfiguracion;
import Util.GestorErrores;
import Util.GestorInferencia;
import Util.Varios;
import java.util.ArrayList;
import java.util.Date;
import javax.swing.JFrame;
import javax.swing.JOptionPane;

/**
 *
 * @author Javi
 */
public class frmComprasDet extends javax.swing.JDialog {
    //Indica la operación que se está realizando
    private char _cOperacion;
    //Referencia al formulario padre
    private frmCompras _frmPadre;
    //Referencia al fomrulario de conjunto de clientes (para la selección de clientes)
    private frmClientes _frmClientes = null;
    //Referencia al formulario de detalle de clientes (hijo)
    private frmClientesDet _frmClientesDet = null;
    //Referencia al objeto de datos principal (Préstamo o Solicitud Préstamo)
    private DatosPrestamo _oDatosPrestamo;
    //Tabla de EstadosAutorizacion, para darle un mensaje de aviso al usuario
    private TAEstadosAutorizacion taEstadosAutorizacion = new TAEstadosAutorizacion();
    /** Creates new form frmComprasDet */
    public frmComprasDet(java.awt.Frame parent, boolean modal) {
        super(parent, modal);
        initComponents();
    }

    public frmComprasDet(frmCompras parent, boolean modal){
        super(parent, modal);
        this._frmPadre = parent;
        //Inicializo la referencia al objeto de datos del formulario padre.
        this._oDatosPrestamo = parent.getoObjetoDatos();
        initComponents();
        //Los combos se cargan a partir de las tablas 1 SOLA VEZ, al crear el formulario.
        this.cargarCombos();
    }

    /*
     * Este método carga los atributos de la clase los controles del formulario de entrada.
     */
    private void claseAPantalla(){
        //Clase Cliente
        this.claseAPantallaDatosCliente();
        //Clase Bien
        this.jTFIdBien.setText( Integer.toString( this._oDatosPrestamo.getoBien().getiIdBien()));
        this.jFTFImporte.setValue (this._oDatosPrestamo.getoBien().getiImporte());
        Varios.seleccionaItemCombo (jCBTipo, this._oDatosPrestamo.getoBien().getsTipo() );
        //Los combos de SubTipo de Bien, CodZona, CodCilindrada, y codUso se cargan en función del valor del Tipo de bien
        this.cargarComboSubTipo (this._oDatosPrestamo.getoBien().getsTipo());
        this.cargarComboCodZona (this._oDatosPrestamo.getoBien().getsTipo());
        this.cargarComboCodCilindrada (this._oDatosPrestamo.getoBien().getsTipo());
        this.cargarComboCodUso (this._oDatosPrestamo.getoBien().getsTipo());
        
        Varios.seleccionaItemCombo (jCBSubTipo, this._oDatosPrestamo.getoBien().getsSubTipo());
        Varios.seleccionaItemCombo (jCBCodZona, this._oDatosPrestamo.getoBien().getsCodZona());
        Varios.seleccionaItemCombo (jCBCodCilindrada, this._oDatosPrestamo.getoBien().getsCodCilindrada());
        Varios.seleccionaItemCombo (jCBCodUso, this._oDatosPrestamo.getoBien().getsCodUso());
        //Clase Compra
        this.jFTFFechaCompra.setValue( this._oDatosPrestamo.getoCompra().getdFechaCompra());
        Varios.seleccionaItemCombo (jCBTipoFinan, this._oDatosPrestamo.getoCompra().getsTipoFinan());
        Varios.seleccionaItemCombo (jCBTipoInteres, this._oDatosPrestamo.getoCompra().getsTipoInteres() );
        Varios.seleccionaItemCombo (jCBTipoFinan, this._oDatosPrestamo.getoCompra().getsTipoFinan() );
        this.jFTFAniosPago.setValue(this._oDatosPrestamo.getoCompra().getiAniosPago());
        this.jFTFImporteMensual.setValue (this._oDatosPrestamo.getoCompra().getiImporteMensual());
        this.jFTFProbMorosidad.setValue(this._oDatosPrestamo.getoCompra().getfProbMorosidad());
        Varios.seleccionaItemCombo (jCBEstadosAutorizacion, this._oDatosPrestamo.getoCompra().getsAutorizada() );
        Varios.seleccionaItemCombo (jCBEstudioMorosidad, this._oDatosPrestamo.getoCompra().getsEstudioMorosidad() );
    }

    private void claseAPantallaDatosCliente(){
        this.jTFIdCliente.setText( Integer.toString( this._oDatosPrestamo.getoCliente().getoClienteDatPers().getiIdCliente()) );
        Varios.seleccionaItemCombo (jCBTipoDocumento, this._oDatosPrestamo.getoCliente().getoClienteDatPers().getsTipoDocumento());
        this.jTFNumDocumento.setText ( this._oDatosPrestamo.getoCliente().getoClienteDatPers().getsNumDocumento() );
        this.jTFNombre.setText( this._oDatosPrestamo.getoCliente().getoClienteDatPers().getsNombre() );
        this.jTFApellidos.setText( this._oDatosPrestamo.getoCliente().getoClienteDatPers().getsApellidos() );
        this.jFTFFecNac.setValue ( this._oDatosPrestamo.getoCliente().getoClienteDatPers().getdFechaNacimiento());
        Varios.seleccionaItemCombo (jCBSexo, this._oDatosPrestamo.getoCliente().getoClienteDatPers().getsSexo());
        Varios.seleccionaItemCombo (jCBNacionalidad, this._oDatosPrestamo.getoCliente().getoClienteDatPers().getsNacionalidad());
    }

    /*
     * Este método captura los datos introducidos por el usuario y los carga en los atributos
     * correspondientes de la clase.
     */
    private void pantallaAClase(){
        //Clase principal
        this._oDatosPrestamo.setiIdCliente(Integer.parseInt (this.jTFIdCliente.getText()));
        this._oDatosPrestamo.setiIdBien(Integer.parseInt (this.jTFIdBien.getText()));
        //Clase Cliente
        this._oDatosPrestamo.getoCliente().getoClienteDatPers().setiIdCliente(Integer.parseInt (this.jTFIdCliente.getText()) );
        this._oDatosPrestamo.getoCliente().getoClienteDatPers().setsTipoDocumento( Varios.getClaveItemCombo (jCBTipoDocumento));
        this._oDatosPrestamo.getoCliente().getoClienteDatPers().setsNumDocumento(this.jTFNumDocumento.getText() );
        this._oDatosPrestamo.getoCliente().getoClienteDatPers().setsNombre( this.jTFNombre.getText() );
        this._oDatosPrestamo.getoCliente().getoClienteDatPers().setsApellidos( this.jTFApellidos.getText() );
        this._oDatosPrestamo.getoCliente().getoClienteDatPers().setdFechaNacimiento((Date) this.jFTFFecNac.getValue());
        this._oDatosPrestamo.getoCliente().getoClienteDatPers().setsSexo( Varios.getClaveItemCombo (jCBSexo));
        this._oDatosPrestamo.getoCliente().getoClienteDatPers().setsNacionalidad(Varios.getClaveItemCombo (jCBNacionalidad));
        //Clase Bien
        this._oDatosPrestamo.getoBien().setiIdBien(Integer.parseInt (this.jTFIdBien.getText()));
        this._oDatosPrestamo.getoBien().setiImporte( (Integer) this.jFTFImporte.getValue ());
        this._oDatosPrestamo.getoBien().setsTipo(Varios.getClaveItemCombo (jCBTipo));
        this._oDatosPrestamo.getoBien().setsSubTipo(Varios.getClaveItemCombo (jCBSubTipo));
        this._oDatosPrestamo.getoBien().setsCodZona(Varios.getClaveItemCombo (jCBCodZona));
        this._oDatosPrestamo.getoBien().setsCodCilindrada(Varios.getClaveItemCombo (jCBCodCilindrada));
        this._oDatosPrestamo.getoBien().setsCodUso(Varios.getClaveItemCombo (jCBCodUso));
        //Clase Compra
        //Las claves de esta clase no se cargan aqui, sino al hacer las operaciones sobre la BD.
        this._oDatosPrestamo.getoCompra().setdFechaCompra( (Date) this.jFTFFechaCompra.getValue());
        this._oDatosPrestamo.getoCompra().setsTipoFinan(Varios.getClaveItemCombo (jCBTipoFinan));
        this._oDatosPrestamo.getoCompra().setsTipoInteres(Varios.getClaveItemCombo (jCBTipoInteres));
        this._oDatosPrestamo.getoCompra().setsTipoFinan(Varios.getClaveItemCombo (jCBTipoFinan) );
        this._oDatosPrestamo.getoCompra().setiAniosPago( (Integer) this.jFTFAniosPago.getValue());
        this._oDatosPrestamo.getoCompra().setiImporteMensual( (Integer) this.jFTFImporteMensual.getValue ());
        this._oDatosPrestamo.getoCompra().setfProbMorosidad( (Float) this.jFTFProbMorosidad.getValue());
        this._oDatosPrestamo.getoCompra().setsAutorizada(Varios.getClaveItemCombo (jCBEstadosAutorizacion) );
        this._oDatosPrestamo.getoCompra().setsEstudioMorosidad(Varios.getClaveItemCombo (jCBEstudioMorosidad) );
    }

    public void inicializaFormulario ( char cOperacion ){
        //Inicializo el código de operación
        this._cOperacion = cOperacion;
        //Carga los datos de la clase
        this.claseAPantalla();
        //Inicializa los controles necesarios
        this.inicializaControles();
    }

    /*
     * Este método carga y habilita/inhabilita los controles que sean necesarios
     */
    private void inicializaControles (){
        //Actualizo el título de la ventana en función de la operación.
        this.setTitle( this._oDatosPrestamo.getsDescripTabla() + " - " + Varios.getLiteralOperacion(this._cOperacion) );
        //Por defecto se muestra el primer panel (Cliente) excepto en 
        // - Modificación de un préstamo
        // - coNcesión de préstamo sobre una solicitud
        // En ese caso se muestra primero el panel de financiación.
        if ( (this._oDatosPrestamo.isbConcedido() && this._cOperacion == 'M') ||
                (!this._oDatosPrestamo.isbConcedido() && this._cOperacion == 'N') )
            jTabbedPane1.setSelectedComponent(jPanelFinanciacion);
        else
            jTabbedPane1.setSelectedComponent(jPanelCliente);
        //Activar/desactivar mostrar/ocultar controles en función del tipo de operación
        //Desactivar los controles en la baja y en la consulta y activarlos en el alta o la modificación
        //También se deshabilitan en la concesión de una solicitud ('N').
        //Si es una modificación de un Préstamo se deshabilita todo también, solo se puede modificar si es moroso o no.
        if ( this._cOperacion == 'C' || this._cOperacion == 'B' || this._cOperacion == 'N' ||
                (this._oDatosPrestamo.isbConcedido() & this._cOperacion == 'M') ){
            //Deshabilitar los controles
            Varios.SetEnabledControles( this.jTabbedPane1, false );
            //Ocultar el botón de selección de clientes.
            this.jButtonBuscar.setVisible(false);
            //Ocultar el botón de más info
            this.jButtonMasInfo.setVisible(true);
            //Ocultar los combos relacionados con el tipo de bien que no sean pertinentes
            //Si el tipo de bien es 1-Inmueble oculto los combos de cilindrada y uso
            if (Varios.getClaveItemCombo (jCBTipo).compareTo("1") == 0){
                this.jLblCodZona.setVisible(true);
                this.jCBCodZona.setVisible(true);
                this.jLblCodCilindrada.setVisible(false);
                this.jCBCodCilindrada.setVisible(false);
                this.jLblCodUso.setVisible(false);
                this.jCBCodUso.setVisible(false);
            }else if (Varios.getClaveItemCombo (jCBTipo).compareTo("2") == 0){
                //Si el tipo de bien es 2-Vehículo, oculto el combo de zona de vivienda
                this.jLblCodZona.setVisible(false);
                this.jCBCodZona.setVisible(false);
                this.jLblCodCilindrada.setVisible(true);
                this.jCBCodCilindrada.setVisible(true);
                this.jLblCodUso.setVisible(true);
                this.jCBCodUso.setVisible(true);
            }else {
                //Si el tipo de bien es cualquier otro, oculto el combo de zona de vivienda
                //y los combos de cilindrad y uso.
                this.jLblCodZona.setVisible(false);
                this.jCBCodZona.setVisible(false);
                this.jLblCodCilindrada.setVisible(false);
                this.jCBCodCilindrada.setVisible(false);
                this.jLblCodUso.setVisible(false);
                this.jCBCodUso.setVisible(false);
            }
        } else{
            //Habilitar los controles
            Varios.SetEnabledControles( this.jTabbedPane1, true );
            //Mostrar el botón de selección de clientes.
            this.jButtonBuscar.setVisible(true);
            //Ocultar el botón de más info
            this.jButtonMasInfo.setVisible(false);
            //Mostrar todos los combos relacionados con el tipo de bien
            this.jLblCodZona.setVisible(true);
            this.jCBCodZona.setVisible(true);
            this.jLblCodCilindrada.setVisible(true);
            this.jCBCodCilindrada.setVisible(true);
            this.jLblCodUso.setVisible(true);
            this.jCBCodUso.setVisible(true);
        }
        //Combo de estudio de morosidad
        //Si se trata de una solicitud la morosidad NO se habilita
        if ( ! this._oDatosPrestamo.isbConcedido() ){
            this.jCBEstudioMorosidad.setEnabled(false);
        }else{
        //Si es un préstamo SI se habilita si es un Alta o una Modificación
            if ( this._cOperacion == 'C' || this._cOperacion == 'B')
                this.jCBEstudioMorosidad.setEnabled(false);
            else
                this.jCBEstudioMorosidad.setEnabled(true);
        }
        //Autorización de compra
        //Si se trata de un Préstamo NO se habilita (la solicitud se autorizó en su dia)
        if ( this._oDatosPrestamo.isbConcedido() ){
            this.jCBEstadosAutorizacion.setEnabled (false);
        }else{
        //Si es una solicitud SI se habilita si es una Modificación
            if ( this._cOperacion == 'M')
                this.jCBEstadosAutorizacion.setEnabled (true);
            else
                this.jCBEstadosAutorizacion.setEnabled (false);
        }

        //Los datos personales NUNCA son editables, ni siquiera en el alta.
        this.jTFIdCliente.setEditable(false);
        this.jCBTipoDocumento.setEnabled (false);
        this.jTFNumDocumento.setEditable(false);
        this.jTFNombre.setEditable(false);
        this.jTFApellidos.setEditable(false);
        this.jFTFFecNac.setEditable(false);
        this.jCBSexo.setEnabled (false);
        this.jCBNacionalidad.setEnabled (false);
        //El idBien NO es editable
        this.jTFIdBien.setEditable(false);
        //La probabilidad de morosidad NO es editable
        this.jFTFProbMorosidad.setEditable(false);
    }

    /*
     * Inicializa los combos a partir de las tablas auxiliares en forma "codigo - descripcion"
     */
    private void cargarCombos(){
        //Cliente
        Varios.cargaCombo (jCBTipoDocumento, new TATiposDocumento());
        Varios.cargaCombo (jCBSexo, new TASexos());
        Varios.cargaCombo (jCBNacionalidad, new TAPaises());
        //Bien
        Varios.cargaCombo (jCBTipo, new TATiposBien());
        //El combo del subtipo de bien se carga cuando se conoce el Tipo de Bien, es decir
        //también se carga en el método claseAPantalla y en el evento de selección del combo de Tipos de Bienes.
        Varios.cargaCombo (jCBSubTipo, null);
        Varios.cargaCombo (jCBCodZona, new TAZonasInmueble());
        Varios.cargaCombo (jCBCodCilindrada, new TACilindradasVehiculo());
        Varios.cargaCombo (jCBCodUso, new TAUsosVehiculo());
        //Compra
        Varios.cargaCombo (jCBTipoFinan, new TATiposFinanciacion());
        Varios.cargaCombo (jCBTipoInteres, new TATiposInteres());
        Varios.cargaCombo (jCBEstadosAutorizacion, new TAEstadosAutorizacion());
        Varios.cargaCombo (jCBEstudioMorosidad, new TAEstudioMorosidad());
    }

    public void cargarComboSubTipo (String sTipoBien){
        if (sTipoBien.compareTo ("") == 0){
            //Inicializo el combo con un elemento vacío
            Varios.cargaCombo (jCBSubTipo, null);
        }else if (sTipoBien.compareTo ("1") == 0){
            //Subtipos de inmueble
            Varios.cargaCombo (jCBSubTipo, new TATiposInmueble());
        }else if (sTipoBien.compareTo ("2") == 0){
            //Subtipos de vehículo
            Varios.cargaCombo (jCBSubTipo, new TATiposVehiculo());
        }else if (sTipoBien.compareTo ("3") == 0){
            //Subtipos de Electrodomésticos
            Varios.cargaCombo (jCBSubTipo, new TATiposElectrodomestico());
        }else if (sTipoBien.compareTo ("4") == 0){
            //Subtipos de Ocio
            Varios.cargaCombo (jCBSubTipo, new TATiposOcio());
        }else if (sTipoBien.compareTo ("5") == 0){
            //Subtipos de Salud
            Varios.cargaCombo (jCBSubTipo, new TATiposSalud());
        }else if (sTipoBien.compareTo ("6") == 0){
            //Subtipos de Otros
            Varios.cargaCombo (jCBSubTipo, new TATiposOtros());
        }
    }
    
    public void cargarComboCodZona (String sTipoBien){
        //Bien de tipo inmueble
        if (sTipoBien.compareTo ("1") == 0)
            Varios.cargaCombo (jCBCodZona, new TAZonasInmueble());
        else
            //Inicializo el combo con un elemento vacío
            Varios.cargaCombo (jCBCodZona, null);
    }

    public void cargarComboCodCilindrada (String sTipoBien){
        //Bien de tipo Vehículo
        if (sTipoBien.compareTo ("2") == 0)
            Varios.cargaCombo (jCBCodCilindrada, new TACilindradasVehiculo());
        else
            //Inicializo el combo con un elemento vacío
            Varios.cargaCombo (jCBCodCilindrada, null);
    }

    public void cargarComboCodUso (String sTipoBien){
        //Bien de tipo Vehículo
        if (sTipoBien.compareTo ("2") == 0)
            Varios.cargaCombo (jCBCodUso, new TAUsosVehiculo());
        else
            //Inicializo el combo con un elemento vacío
            Varios.cargaCombo (jCBCodUso, null);
    }

    public void setoCliente (Cliente oClienteSeleccionado){
        _oDatosPrestamo.setoCliente(oClienteSeleccionado);
        //Actualizamos en la pantalla los datos del cliente elegido.
        this.claseAPantallaDatosCliente();
    }

    public Cliente getoObjetoDatos() {
        return _oDatosPrestamo.getoCliente();
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jTabbedPane1 = new javax.swing.JTabbedPane();
        jPanelCliente = new javax.swing.JPanel();
        jLabel37 = new javax.swing.JLabel();
        jTFIdCliente = new javax.swing.JTextField();
        jLabel48 = new javax.swing.JLabel();
        jCBTipoDocumento = new javax.swing.JComboBox();
        jLabel49 = new javax.swing.JLabel();
        jTFNumDocumento = new javax.swing.JTextField();
        jLabel50 = new javax.swing.JLabel();
        jTFNombre = new javax.swing.JTextField();
        jLabel51 = new javax.swing.JLabel();
        jTFApellidos = new javax.swing.JTextField();
        jLabel52 = new javax.swing.JLabel();
        try{
            jFTFFecNac = new javax.swing.JFormattedTextField( new FormatoFecha() );
            jLabel53 = new javax.swing.JLabel();
            jCBSexo = new javax.swing.JComboBox();
            jLabel54 = new javax.swing.JLabel();
            jCBNacionalidad = new javax.swing.JComboBox();
            jButtonBuscar = new javax.swing.JButton();
            jButtonMasInfo = new javax.swing.JButton();
            jPanel2 = new javax.swing.JPanel();
            jLabel36 = new javax.swing.JLabel();
            jTFIdBien = new javax.swing.JTextField();
            jLabel38 = new javax.swing.JLabel();
            jCBTipo = new javax.swing.JComboBox();
            jLabel39 = new javax.swing.JLabel();
            jCBSubTipo = new javax.swing.JComboBox();
            jLabel29 = new javax.swing.JLabel();
            jFTFImporte = new javax.swing.JFormattedTextField(new Integer(0));
            jLblCodZona = new javax.swing.JLabel();
            jCBCodZona = new javax.swing.JComboBox();
            jLblCodCilindrada = new javax.swing.JLabel();
            jCBCodCilindrada = new javax.swing.JComboBox();
            jLblCodUso = new javax.swing.JLabel();
            jCBCodUso = new javax.swing.JComboBox();
            jPanelFinanciacion = new javax.swing.JPanel();
            jLabel45 = new javax.swing.JLabel();
            try{
                jFTFFechaCompra = new javax.swing.JFormattedTextField( new FormatoFecha() );
                jLabel43 = new javax.swing.JLabel();
                jCBTipoFinan = new javax.swing.JComboBox();
                jLabel44 = new javax.swing.JLabel();
                jCBTipoInteres = new javax.swing.JComboBox();
                jLabel47 = new javax.swing.JLabel();
                jFTFAniosPago = new javax.swing.JFormattedTextField(new Integer(0));
                jLabel30 = new javax.swing.JLabel();
                jFTFImporteMensual = new javax.swing.JFormattedTextField(new Integer(0));
                jLabel31 = new javax.swing.JLabel();
                jFTFProbMorosidad = new javax.swing.JFormattedTextField(new Float(0));
                jLabel46 = new javax.swing.JLabel();
                jCBEstudioMorosidad = new javax.swing.JComboBox();
                jLabel55 = new javax.swing.JLabel();
                jCBEstadosAutorizacion = new javax.swing.JComboBox();
                jButtonAceptar = new javax.swing.JButton();
                jButtonCancelar = new javax.swing.JButton();

                setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);

                jLabel37.setText("IdCliente");

                jTFIdCliente.addActionListener(new java.awt.event.ActionListener() {
                    public void actionPerformed(java.awt.event.ActionEvent evt) {
                        jTFIdClienteActionPerformed(evt);
                    }
                });

                jLabel48.setText("Tipo Documento");

                jCBTipoDocumento.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));

                jLabel49.setText("Número de documento");

                jLabel50.setText("Nombre");

                jLabel51.setText("Apellidos");

                jLabel52.setText("Fecha nacimiento");

            }catch (Exception e){
                e.printStackTrace();
            }

            jLabel53.setText("Sexo");

            jCBSexo.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));
            jCBSexo.addActionListener(new java.awt.event.ActionListener() {
                public void actionPerformed(java.awt.event.ActionEvent evt) {
                    jCBSexoActionPerformed(evt);
                }
            });

            jLabel54.setText("Nacionalidad");

            jCBNacionalidad.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));
            jCBNacionalidad.addActionListener(new java.awt.event.ActionListener() {
                public void actionPerformed(java.awt.event.ActionEvent evt) {
                    jCBNacionalidadActionPerformed(evt);
                }
            });

            jButtonBuscar.setText("Importar Cliente");
            jButtonBuscar.addActionListener(new java.awt.event.ActionListener() {
                public void actionPerformed(java.awt.event.ActionEvent evt) {
                    jButtonBuscarActionPerformed(evt);
                }
            });

            jButtonMasInfo.setText("Más Info Cliente");
            jButtonMasInfo.addActionListener(new java.awt.event.ActionListener() {
                public void actionPerformed(java.awt.event.ActionEvent evt) {
                    jButtonMasInfoActionPerformed(evt);
                }
            });

            javax.swing.GroupLayout jPanelClienteLayout = new javax.swing.GroupLayout(jPanelCliente);
            jPanelCliente.setLayout(jPanelClienteLayout);
            jPanelClienteLayout.setHorizontalGroup(
                jPanelClienteLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanelClienteLayout.createSequentialGroup()
                    .addContainerGap()
                    .addGroup(jPanelClienteLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                        .addGroup(jPanelClienteLayout.createSequentialGroup()
                            .addComponent(jLabel50)
                            .addGap(15, 15, 15)
                            .addComponent(jTFNombre, javax.swing.GroupLayout.PREFERRED_SIZE, 130, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addGroup(jPanelClienteLayout.createSequentialGroup()
                            .addComponent(jLabel51)
                            .addGap(9, 9, 9)
                            .addComponent(jTFApellidos, javax.swing.GroupLayout.PREFERRED_SIZE, 180, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanelClienteLayout.createSequentialGroup()
                            .addComponent(jLabel52)
                            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                            .addComponent(jFTFFecNac, javax.swing.GroupLayout.PREFERRED_SIZE, 83, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 10, Short.MAX_VALUE)
                            .addComponent(jLabel53)
                            .addGap(12, 12, 12)
                            .addComponent(jCBSexo, javax.swing.GroupLayout.PREFERRED_SIZE, 88, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                            .addComponent(jLabel54)
                            .addGap(8, 8, 8)
                            .addComponent(jCBNacionalidad, javax.swing.GroupLayout.PREFERRED_SIZE, 100, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addGroup(jPanelClienteLayout.createSequentialGroup()
                            .addGroup(jPanelClienteLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
                                .addGroup(javax.swing.GroupLayout.Alignment.LEADING, jPanelClienteLayout.createSequentialGroup()
                                    .addComponent(jLabel37)
                                    .addGap(20, 20, 20)
                                    .addComponent(jTFIdCliente, javax.swing.GroupLayout.PREFERRED_SIZE, 42, javax.swing.GroupLayout.PREFERRED_SIZE)
                                    .addGap(54, 54, 54)
                                    .addComponent(jButtonBuscar)
                                    .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                                    .addComponent(jButtonMasInfo))
                                .addGroup(javax.swing.GroupLayout.Alignment.LEADING, jPanelClienteLayout.createSequentialGroup()
                                    .addComponent(jLabel48)
                                    .addGap(7, 7, 7)
                                    .addComponent(jCBTipoDocumento, javax.swing.GroupLayout.PREFERRED_SIZE, 169, javax.swing.GroupLayout.PREFERRED_SIZE)
                                    .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                                    .addComponent(jLabel49)))
                            .addGap(10, 10, 10)
                            .addComponent(jTFNumDocumento, javax.swing.GroupLayout.PREFERRED_SIZE, 89, javax.swing.GroupLayout.PREFERRED_SIZE)))
                    .addContainerGap())
            );
            jPanelClienteLayout.setVerticalGroup(
                jPanelClienteLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(jPanelClienteLayout.createSequentialGroup()
                    .addGap(24, 24, 24)
                    .addGroup(jPanelClienteLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                        .addComponent(jLabel37)
                        .addGroup(jPanelClienteLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(jTFIdCliente, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(jButtonBuscar)
                            .addComponent(jButtonMasInfo)))
                    .addGap(18, 18, 18)
                    .addGroup(jPanelClienteLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                        .addGroup(jPanelClienteLayout.createSequentialGroup()
                            .addGroup(jPanelClienteLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                .addComponent(jLabel48)
                                .addComponent(jCBTipoDocumento, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                            .addGap(18, 18, 18)
                            .addGroup(jPanelClienteLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                .addComponent(jLabel50)
                                .addComponent(jTFNombre, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                            .addGap(18, 18, 18)
                            .addGroup(jPanelClienteLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                .addComponent(jLabel51)
                                .addComponent(jTFApellidos, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
                        .addComponent(jLabel49)
                        .addComponent(jTFNumDocumento, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGap(18, 18, 18)
                    .addGroup(jPanelClienteLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                        .addGroup(jPanelClienteLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(jLabel52)
                            .addComponent(jFTFFecNac, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addComponent(jLabel53)
                        .addComponent(jLabel54)
                        .addComponent(jCBNacionalidad, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addComponent(jCBSexo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addContainerGap(76, Short.MAX_VALUE))
            );

            jTabbedPane1.addTab("Cliente", jPanelCliente);

            jLabel36.setText("IdBien");

            jTFIdBien.addActionListener(new java.awt.event.ActionListener() {
                public void actionPerformed(java.awt.event.ActionEvent evt) {
                    jTFIdBienActionPerformed(evt);
                }
            });

            jLabel38.setText("Tipo de Bien");

            jCBTipo.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));
            jCBTipo.addActionListener(new java.awt.event.ActionListener() {
                public void actionPerformed(java.awt.event.ActionEvent evt) {
                    jCBTipoActionPerformed(evt);
                }
            });

            jLabel39.setText("Subtipo de Bien");

            jLabel29.setText("Importe");

            jFTFImporte.setHorizontalAlignment(javax.swing.JTextField.RIGHT);

            jLblCodZona.setText("Zona");

            jCBCodZona.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));

            jLblCodCilindrada.setText("Cilindrada");

            jCBCodCilindrada.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));

            jLblCodUso.setText("Uso");

            jCBCodUso.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));

            javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2);
            jPanel2.setLayout(jPanel2Layout);
            jPanel2Layout.setHorizontalGroup(
                jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(jPanel2Layout.createSequentialGroup()
                    .addGap(55, 55, 55)
                    .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                        .addGroup(jPanel2Layout.createSequentialGroup()
                            .addComponent(jLabel36)
                            .addGap(20, 20, 20)
                            .addComponent(jTFIdBien, javax.swing.GroupLayout.PREFERRED_SIZE, 42, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addGap(18, 18, 18)
                            .addComponent(jLabel29)
                            .addGap(18, 18, 18)
                            .addComponent(jFTFImporte, javax.swing.GroupLayout.PREFERRED_SIZE, 84, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 10, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addGroup(jPanel2Layout.createSequentialGroup()
                            .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                .addComponent(jLblCodUso)
                                .addComponent(jLblCodZona)
                                .addComponent(jLblCodCilindrada))
                            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                            .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                .addComponent(jCBCodCilindrada, javax.swing.GroupLayout.Alignment.TRAILING, 0, 210, Short.MAX_VALUE)
                                .addComponent(jCBCodUso, javax.swing.GroupLayout.Alignment.TRAILING, 0, 210, Short.MAX_VALUE)
                                .addComponent(jCBCodZona, javax.swing.GroupLayout.PREFERRED_SIZE, 210, javax.swing.GroupLayout.PREFERRED_SIZE)))
                        .addGroup(jPanel2Layout.createSequentialGroup()
                            .addComponent(jLabel38)
                            .addGap(33, 33, 33)
                            .addComponent(jCBTipo, 0, 168, Short.MAX_VALUE))
                        .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel2Layout.createSequentialGroup()
                            .addComponent(jLabel39)
                            .addGap(15, 15, 15)
                            .addComponent(jCBSubTipo, 0, 168, Short.MAX_VALUE)))
                    .addGap(222, 222, 222))
            );
            jPanel2Layout.setVerticalGroup(
                jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(jPanel2Layout.createSequentialGroup()
                    .addGap(27, 27, 27)
                    .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                        .addComponent(jLabel36)
                        .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(jTFIdBien, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(jLabel29)
                            .addComponent(jFTFImporte, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
                    .addGap(18, 18, 18)
                    .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                        .addComponent(jLabel38)
                        .addComponent(jCBTipo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                    .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                        .addComponent(jLabel39)
                        .addComponent(jCBSubTipo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGap(18, 18, 18)
                    .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                        .addComponent(jLblCodZona)
                        .addComponent(jCBCodZona, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                    .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                        .addComponent(jLblCodCilindrada)
                        .addComponent(jCBCodCilindrada, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                    .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                        .addComponent(jLblCodUso)
                        .addComponent(jCBCodUso, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addContainerGap(69, Short.MAX_VALUE))
            );

            jTabbedPane1.addTab("Bien", jPanel2);

            jLabel45.setText("Fecha solicitud");

        }catch (Exception e){
            e.printStackTrace();
        }

        jLabel43.setText("Tipo financiación");

        jCBTipoFinan.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));

        jLabel44.setText("Tipo interés");

        jCBTipoInteres.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));

        jLabel47.setText("Años de pago");

        jFTFAniosPago.setHorizontalAlignment(javax.swing.JTextField.RIGHT);

        jLabel30.setText("Importe mensual");

        jFTFImporteMensual.setHorizontalAlignment(javax.swing.JTextField.RIGHT);

        jLabel31.setFont(new java.awt.Font("Tahoma", 1, 13));
        jLabel31.setText("Probabilidad morosidad (%)");

        jFTFProbMorosidad.setHorizontalAlignment(javax.swing.JTextField.RIGHT);
        jFTFProbMorosidad.setFont(new java.awt.Font("Tahoma", 1, 13));

        jLabel46.setFont(new java.awt.Font("Tahoma", 1, 13));
        jLabel46.setText("Análisis de morosidad del préstamo");

        jCBEstudioMorosidad.setFont(new java.awt.Font("Tahoma", 1, 13));
        jCBEstudioMorosidad.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));

        jLabel55.setFont(new java.awt.Font("Tahoma", 1, 13));
        jLabel55.setText("Autorización solicitud de préstamo");

        jCBEstadosAutorizacion.setFont(new java.awt.Font("Tahoma", 1, 13));
        jCBEstadosAutorizacion.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));

        javax.swing.GroupLayout jPanelFinanciacionLayout = new javax.swing.GroupLayout(jPanelFinanciacion);
        jPanelFinanciacion.setLayout(jPanelFinanciacionLayout);
        jPanelFinanciacionLayout.setHorizontalGroup(
            jPanelFinanciacionLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanelFinanciacionLayout.createSequentialGroup()
                .addGap(47, 47, 47)
                .addGroup(jPanelFinanciacionLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(jPanelFinanciacionLayout.createSequentialGroup()
                        .addComponent(jLabel45, javax.swing.GroupLayout.PREFERRED_SIZE, 90, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addComponent(jFTFFechaCompra, javax.swing.GroupLayout.PREFERRED_SIZE, 83, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 280, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGroup(jPanelFinanciacionLayout.createSequentialGroup()
                        .addComponent(jLabel47)
                        .addGap(18, 18, 18)
                        .addComponent(jFTFAniosPago, javax.swing.GroupLayout.PREFERRED_SIZE, 37, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addGap(18, 18, 18)
                        .addComponent(jLabel30)
                        .addGap(18, 18, 18)
                        .addComponent(jFTFImporteMensual, javax.swing.GroupLayout.PREFERRED_SIZE, 84, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 115, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanelFinanciacionLayout.createSequentialGroup()
                        .addGroup(jPanelFinanciacionLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                            .addGroup(javax.swing.GroupLayout.Alignment.LEADING, jPanelFinanciacionLayout.createSequentialGroup()
                                .addComponent(jLabel44)
                                .addGap(61, 61, 61)
                                .addComponent(jCBTipoInteres, 0, 233, Short.MAX_VALUE))
                            .addGroup(jPanelFinanciacionLayout.createSequentialGroup()
                                .addComponent(jLabel43)
                                .addGap(33, 33, 33)
                                .addComponent(jCBTipoFinan, 0, 233, Short.MAX_VALUE)))
                        .addGap(103, 103, 103))
                    .addGroup(jPanelFinanciacionLayout.createSequentialGroup()
                        .addComponent(jLabel31)
                        .addGap(18, 18, 18)
                        .addComponent(jFTFProbMorosidad, javax.swing.GroupLayout.PREFERRED_SIZE, 84, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 183, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanelFinanciacionLayout.createSequentialGroup()
                        .addGroup(jPanelFinanciacionLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(jLabel55)
                            .addComponent(jLabel46))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                        .addGroup(jPanelFinanciacionLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                            .addComponent(jCBEstudioMorosidad, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                            .addComponent(jCBEstadosAutorizacion, 0, 231, Short.MAX_VALUE))))
                .addGap(102, 102, 102))
        );
        jPanelFinanciacionLayout.setVerticalGroup(
            jPanelFinanciacionLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanelFinanciacionLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanelFinanciacionLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel45)
                    .addComponent(jFTFFechaCompra, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(jPanelFinanciacionLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel43)
                    .addComponent(jCBTipoFinan, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(jPanelFinanciacionLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel44)
                    .addComponent(jCBTipoInteres, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(18, 18, 18)
                .addGroup(jPanelFinanciacionLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel47)
                    .addComponent(jFTFAniosPago, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jLabel30)
                    .addComponent(jFTFImporteMensual, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(18, 18, 18)
                .addGroup(jPanelFinanciacionLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel31)
                    .addComponent(jFTFProbMorosidad, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(13, 13, 13)
                .addGroup(jPanelFinanciacionLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jCBEstadosAutorizacion, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jLabel55))
                .addGap(18, 18, 18)
                .addGroup(jPanelFinanciacionLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jCBEstudioMorosidad, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jLabel46))
                .addContainerGap(25, Short.MAX_VALUE))
        );

        jTabbedPane1.addTab("Datos financiación", jPanelFinanciacion);

        jButtonAceptar.setText("Aceptar");
        jButtonAceptar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButtonAceptarActionPerformed(evt);
            }
        });

        jButtonCancelar.setText("Cancelar");
        jButtonCancelar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButtonCancelarActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addContainerGap()
                        .addComponent(jTabbedPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 554, Short.MAX_VALUE))
                    .addGroup(layout.createSequentialGroup()
                        .addGap(196, 196, 196)
                        .addComponent(jButtonAceptar)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jButtonCancelar)))
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addGap(18, 18, 18)
                .addComponent(jTabbedPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 315, Short.MAX_VALUE)
                .addGap(18, 18, 18)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jButtonAceptar)
                    .addComponent(jButtonCancelar))
                .addContainerGap())
        );

        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void jButtonAceptarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonAceptarActionPerformed
        ArrayList<Regla> alReglas = new ArrayList<Regla> ();
        boolean bResultadoOK = false;
        this.pantallaAClase();
        //Inicializo el vector global de errores
        GestorErrores.getInstancia().getvErrores().clear();
        switch (this._cOperacion){
            case 'A': //Alta
                if ( !this._oDatosPrestamo.isbConcedido() ){  //Tratamiento SOLO PARA LA SOLICITUD
                    //Se obtiene el porcentaje de morosidad Y SE MUESTRA EN PANTALLA
                    alReglas = GestorInferencia.getInstancia().evaluaSolicitud((SolicitudPrestamo) this._oDatosPrestamo);
                    if (alReglas.size() == 1)
                        this._oDatosPrestamo.getoCompra().setfProbMorosidad( (int) (100 * alReglas.get(0).getfValorMorosidad()) );
                    else    //No hay reglas que cumplan o HAY MAS DE 1
                        //ASIGNO PROB= UMBRAL MÍNIMO PARA DENEGACIÓN CON LO QUE QUEDA PENDIENTE DE REVISIÓN
                        this._oDatosPrestamo.getoCompra().setfProbMorosidad( Integer.parseInt( GestorConfiguracion.getInstancia().getProperty(GestorConfiguracion.MIN_DENEGA_AUTO)) );

                    this.jFTFProbMorosidad.setValue(this._oDatosPrestamo.getoCompra().getfProbMorosidad());
                    //Se establece AUTOMÁTICAMENTE el estado de autorización
                    ((SolicitudPrestamo) this._oDatosPrestamo).setsAutorizada (this._oDatosPrestamo.getoCompra().getfProbMorosidad());
                }
                bResultadoOK = this._oDatosPrestamo.insert();
                break;
            case 'M':    //Actualizacion
                if ( !this._oDatosPrestamo.isbConcedido() ){  //Tratamiento SOLO PARA LA SOLICITUD
                    //Se obtiene el porcentaje de morosidad (POR SI HA CAMBIADO ALGÚN DATO) Y SE MUESTRA EN PANTALLA
                    alReglas = GestorInferencia.getInstancia().evaluaSolicitud((SolicitudPrestamo) this._oDatosPrestamo);
                    if (alReglas.size() == 1)
                        this._oDatosPrestamo.getoCompra().setfProbMorosidad( (int) (100 * alReglas.get(0).getfValorMorosidad()) );
                    else    //No hay reglas que cumplan o HAY MAS DE 1
                        //ASIGNO PROB= UMBRAL MÍNIMO PARA DENEGACIÓN CON LO QUE QUEDA PENDIENTE DE REVISIÓN
                        this._oDatosPrestamo.getoCompra().setfProbMorosidad( Integer.parseInt( GestorConfiguracion.getInstancia().getProperty(GestorConfiguracion.MIN_DENEGA_AUTO)) );

                    this.jFTFProbMorosidad.setValue(this._oDatosPrestamo.getoCompra().getfProbMorosidad());
                    //Guardo el estado introducido por el usuario
                    String sAutorizadaUser = this._oDatosPrestamo.getoCompra().getsAutorizada();
                    //Se establece AUTOMÁTICAMENTE el estado de autorización en función de la probabilidad
                    ((SolicitudPrestamo) this._oDatosPrestamo).setsAutorizada (this._oDatosPrestamo.getoCompra().getfProbMorosidad());
                    //Si el estado automático que se le asigna a la solicitud en función de la probabilidad de morosidad es el de
                    //2 -pendiente de evaluar, solamente en ese caso permito que el usuario le ponga él el estado
                    if ( this._oDatosPrestamo.getoCompra().getsAutorizada().equals("2") ){
                        this._oDatosPrestamo.getoCompra().setsAutorizada( sAutorizadaUser );
                    }
                }
                bResultadoOK = this._oDatosPrestamo.update();
                break;
            case 'B':    //Borrado
                //Pedir confirmación para borrar
                if ( JOptionPane.YES_OPTION == JOptionPane.showConfirmDialog( null, "Va a borrar la solicitud y toda la información asociada a él \n¿Está seguro?" ,"Aviso", JOptionPane.YES_NO_OPTION)){
                    bResultadoOK = this._oDatosPrestamo.delete();
                    break;
                }else
                    return;     //Se cancela la operación
            case 'N': //Concesión del préstamo a partir de la solicitud.
                //Opción solo operativa con Solicitudes de préstamos
                if (!this._oDatosPrestamo.isbConcedido() )
                    bResultadoOK = ((SolicitudPrestamo) this._oDatosPrestamo).conceder();
                break;
            case 'C':    //Consulta
                bResultadoOK = true;
                break;
        }
        if ( !bResultadoOK ){
            //Si ha habido errores informo de ellos
            String mensaje = "¡Error en la operación!" + "\n";
            for (int i= 0; i< GestorErrores.getInstancia().getvErrores().size(); i++)
                mensaje = mensaje + GestorErrores.getInstancia().getvErrores().get(i) + "\n";
            JOptionPane.showMessageDialog( null, mensaje,"Aviso", JOptionPane.WARNING_MESSAGE);
        }else{
            //Si no ha habido errores doy mensaje de información de la operación
            if (this._cOperacion == 'A'){    //Alta
                if ( this._oDatosPrestamo.isbConcedido() )  //Mensaje para el préstamo
                    JOptionPane.showMessageDialog( null, "Alta realizada","Aviso", JOptionPane.INFORMATION_MESSAGE);
                else{   //Mensaje para la solicitud de préstamo
                    //Recupero la descripción del estado de autorización en el que queda la solicitud.
                    this.taEstadosAutorizacion.setsCodigo(this._oDatosPrestamo.getoCompra().getsAutorizada());
                    this.taEstadosAutorizacion.recupera();
                    String mensaje = "Alta realizada" + "\n";
                    switch(alReglas.size()){
                        case 0:
                            mensaje += "El sistema no ha podido determinar un valor para la morosidad (no se cumple ninguna regla).\n" +
                                    "El sistema ha asignado una morosidad del " + this._oDatosPrestamo.getoCompra().getfProbMorosidad() + "% (umbral min. deneg.)\n";
                            break;
                        case 1:
                            mensaje += "La morosidad obtenida ha sido del " + this._oDatosPrestamo.getoCompra().getfProbMorosidad() + "%\n" +
                                    "(IdRegla = " + alReglas.get(0).getiIdRegla() +
                                    " Prob. Morosidad = " + alReglas.get(0).getfValorMorosidad()+ ")\n";
                            break;
                        default:
                            String sMensajeReglas = "";
                            for(int i = 0; i < alReglas.size(); i++)
                                sMensajeReglas += "IdRegla = " + alReglas.get(i).getiIdRegla() +
                                        " Prob. Morosidad = " + alReglas.get(i).getfValorMorosidad() + "\n";
                            mensaje += "¡¡La solicitud cumple más de 1 regla!! Revise la definición de las mismas.\n " +
                                    sMensajeReglas +
                                    "El sistema ha asignado una morosidad del " + this._oDatosPrestamo.getoCompra().getfProbMorosidad() + "% (umbral min. deneg.)\n";
                           break;
                    }
                    mensaje += "La solicitud ha quedado en estado " + this.taEstadosAutorizacion.getsDescripcion();
                    JOptionPane.showMessageDialog( null, mensaje,"Aviso", JOptionPane.INFORMATION_MESSAGE);
                }
            }else if (this._cOperacion == 'M'){    //Actualizacion
                if ( this._oDatosPrestamo.isbConcedido() )  //Mensaje para el préstamo
                    JOptionPane.showMessageDialog( null, "Modificación realizada","Aviso", JOptionPane.INFORMATION_MESSAGE);
                else{   //Mensaje para la solicitud de préstamo
                    //Recupero la descripción del estado de autorización en el que queda la solicitud.
                    this.taEstadosAutorizacion.setsCodigo(this._oDatosPrestamo.getoCompra().getsAutorizada());
                    this.taEstadosAutorizacion.recupera();
                    String mensaje = "Modificación realizada" + "\n";
                    switch(alReglas.size()){
                        case 0:
                            mensaje += "El sistema no ha podido determinar un valor para la morosidad (no se cumple ninguna regla)\n" +
                                    "El sistema ha asignado una morosidad del " + this._oDatosPrestamo.getoCompra().getfProbMorosidad() + "% (umbral min. deneg.)\n";
                            break;
                        case 1:
                            mensaje += "La morosidad obtenida ha sido del " + this._oDatosPrestamo.getoCompra().getfProbMorosidad() + "%\n" +
                                    "(IdRegla = " + alReglas.get(0).getiIdRegla() +
                                    " Prob. Morosidad = " + alReglas.get(0).getfValorMorosidad()+ ")\n";
                            break;
                        default:
                            String sMensajeReglas = "";
                            for(int i = 0; i < alReglas.size(); i++)
                                sMensajeReglas += "IdRegla = " + alReglas.get(i).getiIdRegla() +
                                        " Prob. Morosidad = " + alReglas.get(i).getfValorMorosidad() + "\n";
                            mensaje += "¡¡Error: la solicitud cumple más de 1 regla!! Revise la definición de las mismas.\n " +
                                    sMensajeReglas +
                                    "El sistema ha asignado una morosidad del " + this._oDatosPrestamo.getoCompra().getfProbMorosidad() + "% (umbral min. deneg.)\n";
                           break;
                    }
                    mensaje += "La solicitud ha quedado en estado " + this.taEstadosAutorizacion.getsDescripcion();
                    JOptionPane.showMessageDialog( null, mensaje,"Aviso", JOptionPane.INFORMATION_MESSAGE);
                }
            }else if (this._cOperacion == 'B')    //Borrado
                JOptionPane.showMessageDialog( null, "Baja realizada","Aviso", JOptionPane.INFORMATION_MESSAGE);
            else if (this._cOperacion == 'N')    //Concesión de préstamo
                JOptionPane.showMessageDialog( null, "Préstamo concedido.\nÉste ha pasado a formar parte de la base de casos","Aviso", JOptionPane.INFORMATION_MESSAGE);
            //Si la operación es una CONSULTA no doy ningún aviso.
            //Actualizo la vista de los datos en el formulario padre
            this._frmPadre.actualizarVista("");
        }
        //Ocultar la ventana solo si el resultado ha sido OK.
        setVisible( (bResultadoOK)? false:true );
}//GEN-LAST:event_jButtonAceptarActionPerformed

    private void jButtonCancelarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonCancelarActionPerformed
        setVisible( false );
}//GEN-LAST:event_jButtonCancelarActionPerformed

    private void jTFIdBienActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jTFIdBienActionPerformed
        // TODO add your handling code here:
}//GEN-LAST:event_jTFIdBienActionPerformed

    private void jTFIdClienteActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jTFIdClienteActionPerformed
        // TODO add your handling code here:
}//GEN-LAST:event_jTFIdClienteActionPerformed

    private void jCBSexoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jCBSexoActionPerformed
        // TODO add your handling code here:
}//GEN-LAST:event_jCBSexoActionPerformed

    private void jCBNacionalidadActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jCBNacionalidadActionPerformed
        // TODO add your handling code here:
}//GEN-LAST:event_jCBNacionalidadActionPerformed

    private void jButtonBuscarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonBuscarActionPerformed
        //Create and set up the window.
        //Como excepción el formulario se ejecuta en modo MODAL
        if ( this._frmClientes == null ){
            this._frmClientes = new frmClientes ( this, true, 'P' );
            this._frmClientes.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
            this._frmClientes.setLocationRelativeTo(this);

            //Display the window.
            this._frmClientes.pack();
        }
        //Refrescar la pantalla (para que no se vea el resultado de
        //los filtros aplicados anteriomente)
        //Carga de los datos en la pantalla
        this._frmClientes.actualizarVista("");
        this._frmClientes.setVisible(true);
    }//GEN-LAST:event_jButtonBuscarActionPerformed

    private void jCBTipoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jCBTipoActionPerformed
        this.cargarComboSubTipo (Varios.getClaveItemCombo (jCBTipo));
        this.cargarComboCodZona (Varios.getClaveItemCombo (jCBTipo));
        this.cargarComboCodCilindrada (Varios.getClaveItemCombo (jCBTipo));
        this.cargarComboCodUso (Varios.getClaveItemCombo (jCBTipo));
    }//GEN-LAST:event_jCBTipoActionPerformed

    private void jButtonMasInfoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonMasInfoActionPerformed
            //Create and set up the window.
            if ( this._frmClientesDet == null ){
                this._frmClientesDet = new frmClientesDet( this, true );
                this._frmClientesDet.setLocationRelativeTo(this);
                this._frmClientesDet.pack();
            }
            this._frmClientesDet.inicializaFormulario('C');
            this._frmClientesDet.setVisible(true);
    }//GEN-LAST:event_jButtonMasInfoActionPerformed


    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton jButtonAceptar;
    private javax.swing.JButton jButtonBuscar;
    private javax.swing.JButton jButtonCancelar;
    private javax.swing.JButton jButtonMasInfo;
    private javax.swing.JComboBox jCBCodCilindrada;
    private javax.swing.JComboBox jCBCodUso;
    private javax.swing.JComboBox jCBCodZona;
    private javax.swing.JComboBox jCBEstadosAutorizacion;
    private javax.swing.JComboBox jCBEstudioMorosidad;
    private javax.swing.JComboBox jCBNacionalidad;
    private javax.swing.JComboBox jCBSexo;
    private javax.swing.JComboBox jCBSubTipo;
    private javax.swing.JComboBox jCBTipo;
    private javax.swing.JComboBox jCBTipoDocumento;
    private javax.swing.JComboBox jCBTipoFinan;
    private javax.swing.JComboBox jCBTipoInteres;
    private javax.swing.JFormattedTextField jFTFAniosPago;
    private javax.swing.JFormattedTextField jFTFFecNac;
    private javax.swing.JFormattedTextField jFTFFechaCompra;
    private javax.swing.JFormattedTextField jFTFImporte;
    private javax.swing.JFormattedTextField jFTFImporteMensual;
    private javax.swing.JFormattedTextField jFTFProbMorosidad;
    private javax.swing.JLabel jLabel29;
    private javax.swing.JLabel jLabel30;
    private javax.swing.JLabel jLabel31;
    private javax.swing.JLabel jLabel36;
    private javax.swing.JLabel jLabel37;
    private javax.swing.JLabel jLabel38;
    private javax.swing.JLabel jLabel39;
    private javax.swing.JLabel jLabel43;
    private javax.swing.JLabel jLabel44;
    private javax.swing.JLabel jLabel45;
    private javax.swing.JLabel jLabel46;
    private javax.swing.JLabel jLabel47;
    private javax.swing.JLabel jLabel48;
    private javax.swing.JLabel jLabel49;
    private javax.swing.JLabel jLabel50;
    private javax.swing.JLabel jLabel51;
    private javax.swing.JLabel jLabel52;
    private javax.swing.JLabel jLabel53;
    private javax.swing.JLabel jLabel54;
    private javax.swing.JLabel jLabel55;
    private javax.swing.JLabel jLblCodCilindrada;
    private javax.swing.JLabel jLblCodUso;
    private javax.swing.JLabel jLblCodZona;
    private javax.swing.JPanel jPanel2;
    private javax.swing.JPanel jPanelCliente;
    private javax.swing.JPanel jPanelFinanciacion;
    private javax.swing.JTextField jTFApellidos;
    private javax.swing.JTextField jTFIdBien;
    private javax.swing.JTextField jTFIdCliente;
    private javax.swing.JTextField jTFNombre;
    private javax.swing.JTextField jTFNumDocumento;
    private javax.swing.JTabbedPane jTabbedPane1;
    // End of variables declaration//GEN-END:variables

}
